﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace QLNSTL
{
    public partial class frmChucVu : Form
    {
        QLNS_TLDataContext dc = new QLNS_TLDataContext();
        ChucVu pb = new ChucVu();
        public frmChucVu()
        {
            InitializeComponent();
        }

        private DataTable Convert_Table(IQueryable<ChucVu> table)
        {
            DataTable result = new DataTable();
            result.Columns.Add("MaCV");
            result.Columns.Add("Tên chức vụ");
            result.Columns.Add("Mô tả");
            result.Columns.Add("Công việc chính");

            foreach (var r in table)
            {
                DataRow row = result.NewRow();
                row["MaCV"] = r.maChucVu;
                row["Tên chức vụ"] = r.tenChucVu;
                row["Mô tả"] = r.moTa;
                row["Công việc chính"] = r.congViecChinh;
                result.Rows.Add(row);
            }
            return result;
        }

        private void Load_DataGrid()
        {
            QLNS_TLDataContext dc = new QLNS_TLDataContext();
            var pbs = from p in dc.ChucVus
                      select p;
            if (pbs != null)
            {
                dataGridView1.DataSource = Convert_Table(pbs);
                dataGridView1.Columns["MaCV"].Visible = false;
            }
        }

        private void Load_Detail(int ma)
        {
            try
            {
                dc = new QLNS_TLDataContext();
                pb = dc.ChucVus.SingleOrDefault(p => p.maChucVu == ma);
                if (pb != null)
                {
                    txtTenPhong.Text = pb.tenChucVu;
                    txtMoTa.Text = pb.moTa;
                    txtCongViecChinh.Text = pb.congViecChinh;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Có lỗi trong quá trình tải thông tin phòng ban.\n\nChi tiết:\n" + ex.Message);
            }

        }

        private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex < 0)
            {
                return;
            }
            if (dataGridView1.Rows[e.RowIndex].Cells["MaCV"].Value != DBNull.Value)
            {
                int maCV = int.Parse(dataGridView1.Rows[e.RowIndex].Cells["MaCV"].Value.ToString());
                Load_Detail(maCV);
                btLuu.Text = "Cập nhật";
            }
        }

        private void ChuanBiTaoMoi()
        {
            dc = new QLNS_TLDataContext();
            pb = null;
            btLuu.Text = "Tạo";
            txtMoTa.Text = "";
            txtTenPhong.Text = "";
            txtCongViecChinh.Text = "";
        }

        private void btThem_Click(object sender, EventArgs e)
        {
            ChuanBiTaoMoi();
        }

        private void btXoa_Click(object sender, EventArgs e)
        {
            if (dataGridView1.SelectedRows.Count < 1)
            {
                MessageBox.Show("Vui lòng chọn một chức vụ.");
                return;
            }

            if (dataGridView1.SelectedRows[0] != null)
            {
                if (dataGridView1.SelectedRows[0].Cells["MaCV"].Value != null)
                {
                    QLNS_TLDataContext dc1 = new QLNS_TLDataContext();
                    int ma = int.Parse(dataGridView1.SelectedRows[0].Cells["MaCV"].Value.ToString());
                    var dsnv = from nv in dc1.NhanViens
                               where nv.maChucVu == ma
                               select nv;
                    if (dsnv != null)
                    {
                        if (dsnv.Count() > 0)
                        {
                            MessageBox.Show("Không thể xóa chức vụ đã chọn.\n\nVẫn còn nhân viên thuộc chức vụ muốn xóa.");
                            return;
                        }
                    }

                    if (MessageBox.Show("Bạn có chắc là muốn xóa chức vụ đã chọn", "Confirm", MessageBoxButtons.YesNo) == DialogResult.Yes)
                    {

                        try
                        {
                            QLNS_TLDataContext dc = new QLNS_TLDataContext();
                            var kt = dc.ChucVus.SingleOrDefault(k => k.maChucVu == ma);
                            if (kt != null)
                            {
                                dc.ChucVus.DeleteOnSubmit(kt); 
                            }
                            dc.SubmitChanges();
                            MessageBox.Show("Đã xóa chức vụ.");
                            refresh();
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show("Có lỗi trong quá trình truy cập dữ liệu. Không thể xóa chức vụ. \n\nChi tiết:\n" + ex.Message);
                        }
                    }
                }
            }
        }

        private void btLuu_Click(object sender, EventArgs e)
        {
            if (txtMoTa.Text.Length < 1 || txtTenPhong.Text.Length < 1 || txtCongViecChinh.Text.Length < 1)
            {
                MessageBox.Show("Vui lòng điền đầy đủ thông tin.");
                return;
            }
            try
            {
                if (dc != null)
                {
                    if (pb == null)
                    {
                        pb = new ChucVu();
                        #region maChucVu
                        int maPBMax = 1;
                        if (dc.ChucVus.Count() > 0)
                        {
                            maPBMax = (from n in dc.ChucVus select n.maChucVu).Max();
                            maPBMax++;
                        }
                        pb.maChucVu = maPBMax;
                        #endregion


                        pb.tenChucVu = txtTenPhong.Text;
                        pb.congViecChinh = txtCongViecChinh.Text;

                        pb.moTa = txtMoTa.Text;
                        dc.ChucVus.InsertOnSubmit(pb);
                        dc.SubmitChanges();
                        MessageBox.Show("Thêm phòng ban thành công.");
                    }
                    else
                    {
                        pb.tenChucVu = txtTenPhong.Text;
                        pb.congViecChinh = txtCongViecChinh.Text;
                        pb.moTa = txtMoTa.Text;
                        dc.SubmitChanges();
                        MessageBox.Show("Cập nhật thông tin phòng ban thành công.");
                    }
                    refresh();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Không thể lưu thông tin nhân viên. Có lỗi trong quá trình truy cập cơ sở dữ liệu.\n\nChi tiết:\n" + ex.Message);
                return;
            }
        }

        private void btThoat_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void refresh()
        {
            Load_DataGrid();
            ChuanBiTaoMoi();
        }

        private void frmPhongBan_Load(object sender, EventArgs e)
        {
            refresh();
        }
    }
}
